package IO;
//注意独有方法的返回值类型
/*
 * 字符缓冲流独有拷贝方式  ————  一次读取一行数据
 *      分类：
 *          BufferedReader: 字符缓冲输入流（也叫高效字符输入流）
 *              成员方法：
 *              public String readLine() :  一次读取一行数据并返回读取到的内容，读不到返回null
 *          BufferedWriter: 字符缓冲输出流（也叫高效字符输出流）
 *              成员方法：
 *              public void newLine: 根据当前操作系统给出相应的换行符
 *                                   windows操作系统：        /r/n
 *                                   mac操作系统：            /r
 *                                   unix / Linux操作系统：   /n
*/

import java.io.*;

public class UniqueUse {
    public static void main(String[] args) throws IOException {
        //需求: 实现高效字符流的独特用法：
        System.out.println("给👴好好看注释");
        //1.创建（高效）字符输入流对象，关联数据源文件
        BufferedReader bufferedReader = new BufferedReader(new FileReader("D:\\code\\高效字符流滴数据源文件.txt"));
        //提前在输入流文件中输入数据
        //2.创建（高效）字符输出流对象，关联目的地文件
        BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter("D:\\code\\高效字符流滴目的地文件.txt"));
        //3.定义变量，记录读取到的内容
        String len;
        //4.循环读取，只要条件满足就一直读取，并将读到的数据赋值给变量
        while ((len = bufferedReader.readLine()) != null)
        {
            //5.将读取到的数据写入到 目的地文件中
            bufferedWriter.write(len);
            bufferedWriter.newLine();
            //千万别忘记换行
            /*
                Δ注意:
             若不写bufferedWriter.newLine();
             文件中的内容同样可以拷贝成功，但是，全部在一行。
             所以newLine() 这行代码是个容易忽略但不可忽略的小细节
             */
        }
        //6.释放资源  (最好提前写上，以防粗心忘记)
        bufferedReader.close();
        bufferedWriter.close();
    }
}
/*
 * 特别注意（重要） :
 *      ①字符流只能拷贝纯文本文件！
 *      ②拷贝文件内容时，并不会考虑目的地文件中旧的内容，
 *       而是直接根据数据源文件中的内容进行重新覆盖
 */
/*
* 还有一个小细节：
*    如果数据源文件中最后无换行，目的地文件拷贝后会因为newLine() 加一个换行
*    但如果数据源文件最后有换行，由于循环体中最后还加了一个换行，所以拷贝后目的地文件就与数据源文件一致了
*/
